
import { ref, reactive, computed, defineExpose, onMounted, onBeforeUnmount } from "vue";
import { ElMessage } from "element-plus";
import { emitter } from "@/utils/mitt";
export function usescreen() {
  // data
  const isdisabled = ref<boolean>(true);
  const MZData = [
    { "id": "1", "text": "超速行驶" },
    { "id": "2", "text": "违章停车" },
    { "id": "3", "text": "性别" },
    { "id": "4", "text": "民族" },
    { "id": "5", "text": "婚姻状况" },
    { "id": "6", "text": "省份" },
    { "id": "7", "text": "教育程度" },
    { "id": "8", "text": "职业" },
    { "id": "9", "text": "健康状况" },
    { "id": "10", "text": "是否吸烟" },
    { "id": "11", "text": "是否在肿瘤或心脑血管科室就诊过" },
    { "id": "12", "text": "是否产生高额医疗费" },
    { "id": "13", "text": "购买保险" },
    { "id": "14", "text": "理赔原因" },
    { "id": "15", "text": "搜索关键词" },
    { "id": "16", "text": "搜索次数" },
    { "id": "17", "text": "酒驾记录" },
    { "id": "18", "text": "常购服装码数" },
    { "id": "19", "text": "每月消费与收入占比" },
    { "id": "20", "text": "年收入" },
    { "id": "21", "text": "年龄" },
    { "id": "22", "text": "日均睡眠时长" },
    { "id": "23", "text": "每周外卖频率" },
    { "id": "24", "text": "当前逾期期数" },
    { "id": "25", "text": "累计逾期次数" },
    { "id": "26", "text": "最高逾期期数" },
    { "id": "27", "text": "日均行驶时间" },
    { "id": "28", "text": "平均单次行驶时长" },
    { "id": "29", "text": "日均夜间驾驶" },
    { "id": "30", "text": "日均急加速次数" },
    { "id": "31", "text": "日均急刹车次数" },
    { "id": "32", "text": "日均急转弯次数" },
    { "id": "33", "text": "平均速度" },
    { "id": "34", "text": "平均加速度" },
    { "id": "35", "text": "行车车距过近次数" },
    { "id": "36", "text": "前车碰撞次数" },
    { "id": "37", "text": "驾龄" }
  ]
  const TJData = [{ id: "1", text: ">" }, { id: "2", text: "=" }, { id: "3", text: "<" }, { id: "4", text: ">=" }, { id: "5", text: "<=" }, { id: "6", text: "≠" }]
  const BHData = [{ id: "1", text: "包含" }, { id: "2", text: "不包含" }];
  const CZData = [{ id: "4", text: "客户属性满足" }];
  const selData = {
    sex: [{ "id": "1", "text": "男" }, { "id": "2", "text": "女" }],
    fame: [{ "id": "1", "text": "汉族" }, { "id": "2", "text": "蒙古族" }, { "id": "3", "text": "回族" }, { "id": "4", "text": "藏族" }, { "id": "5", "text": "维吾尔族" }, { "id": "6", "text": "苗族" }, { "id": "7", "text": "彝族" }, { "id": "8", "text": "壮族" }, { "id": "9", "text": "布依族" }, { "id": "10", "text": "朝鲜族" }, { "id": "11", "text": "满族" }, { "id": "12", "text": "侗族" }, { "id": "13", "text": "瑶族" }, { "id": "14", "text": "白族" }, { "id": "15", "text": "土家族" }, { "id": "16", "text": "哈尼族" }, { "id": "17", "text": "哈萨克族" }, { "id": "18", "text": "傣族" }, { "id": "19", "text": "黎族" }, { "id": "20", "text": "僳僳族" }, { "id": "21", "text": "佤族" }, { "id": "22", "text": "畲族" }, { "id": "23", "text": "高山族" }, { "id": "24", "text": "拉祜族" }, { "id": "25", "text": "水族" }, { "id": "26", "text": "东乡族" }, { "id": "27", "text": "纳西族" }, { "id": "28", "text": "景颇族" }, { "id": "29", "text": "柯尔克孜族" }, { "id": "30", "text": "土族" }, { "id": "31", "text": "达斡尔族" }, { "id": "32", "text": "仫佬族" }, { "id": "33", "text": "羌族" }, { "id": "34", "text": "布朗族" }, { "id": "35", "text": "撒拉族" }, { "id": "36", "text": "毛南族" }, { "id": "37", "text": "仡佬族" }, { "id": "38", "text": "锡伯族" }, { "id": "39", "text": "阿昌族" }, { "id": "40", "text": "普米族" }, { "id": "41", "text": "塔吉克族" }, { "id": "42", "text": "怒族" }, { "id": "43", "text": "乌孜别克族" }, { "id": "44", "text": "俄罗斯族" }, { "id": "45", "text": "鄂温克族" }, { "id": "46", "text": "德昂族" }, { "id": "47", "text": "保安族" }, { "id": "48", "text": "裕固族" }, { "id": "49", "text": "京族" }, { "id": "50", "text": "塔塔尔族" }, { "id": "51", "text": "独龙族" }, { "id": "52", "text": "鄂伦春族" }, { "id": "53", "text": "赫哲族" }, { "id": "54", "text": "门巴族" }, { "id": "55", "text": "珞巴族" }, { "id": "56", "text": "基诺族" }],
    marry: [{ "id": "1", "text": "未婚" }, { "id": "2", "text": "已婚有子女" }, { "id": "3", "text": "已婚无子女" }],
    study: [{ "id": "1", "text": "初等教育" }, { "id": "2", "text": "中等教育" }, { "id": "3", "text": "高等教育" }],
    dwxz: [{ "id": "1", "text": "1类职业" }, { "id": "2", "text": "2类职业" }, { "id": "3", "text": "3类职业" }, { "id": "4", "text": "4类职业" }, { "id": "5", "text": "5类职业" }, { "id": "6", "text": "6类职业" }],
    // health: [
    //   { "id": "1", "text": "脑出血、脑梗塞、脑动脉硬化、癫痫病、精神病" },
    //   { "id": "2", "text": "任何白内障、青光眼、中耳炎、视网膜疾病" },
    //   { "id": "3", "text": "哮喘、慢性支气管炎、肺气肿、胸膜疾病、肺结核、支气管扩张" },
    //   { "id": "4", "text": "高血压、冠心病、风湿性心脏病、先天性心脏病" },
    //   { "id": "5", "text": "食道疾病、胃炎、消化性溃疡、肝炎或病毒携带、肝硬化、胆囊炎、胰腺炎、肠炎" },
    //   { "id": "6", "text": "肾小球肾炎、肾盂肾炎、肾病综合症、肾功能不全、尿路结石" },
    //   { "id": "7", "text": "糖尿病或血糖异常、甲状腺疾病或检查异常、肾上腺疾病" },
    //   { "id": "8", "text": "类风湿关节炎、系统性红斑狼疮、硬皮病" },
    //   { "id": "9", "text": "各种贫血、血小板减少性紫癜、淋巴瘤" },
    //   { "id": "10", "text": "视力、听力、言语、咀嚼功能障碍、肢残疾、胸廓、脊柱变形和功能障碍" },
    //   { "id": "11", "text": "颈椎病、腰椎间盘突出症、骨与关节结核、骨关节病" },
    //   { "id": "12", "text": "恶性肿瘤、良性肿瘤、结节、肿块、包块等占位性病变及不典型增生、新生物等" },
    //   { "id": "13", "text": "性病、HIV抗体阳性者、艾滋病及其并发症" },
    //   { "id": "14", "text": "任何身体异常、残疾、畸形、缺损、假体、受伤" }
    // ],
    health: [
      { "id": "1", "text": "健康" },
      { "id": "2", "text": "一般" },
      { "id": "3", "text": "患有疾病" }
    ],
    provice: [{ "id": "1", "text": "北京市" }, { "id": "2", "text": "天津市" }, { "id": "3", "text": "上海市" }, { "id": "4", "text": "重庆市" }, { "id": "5", "text": "河北省" }, { "id": "6", "text": "山西省" }, { "id": "7", "text": "辽宁省" }, { "id": "8", "text": "吉林省" }, { "id": "9", "text": "黑龙江省" }, { "id": "10", "text": "江苏省" }, { "id": "11", "text": "浙江省" }, { "id": "12", "text": "安徽省" }, { "id": "13", "text": "福建省" }, { "id": "14", "text": "江西省" }, { "id": "15", "text": "山东省" }, { "id": "16", "text": "河南省" }, { "id": "17", "text": "湖北省" }, { "id": "18", "text": "湖南省" }, { "id": "19", "text": "广东省" }, { "id": "20", "text": "海南省" }, { "id": "21", "text": "四川省" }, { "id": "22", "text": "贵州省" }, { "id": "23", "text": "云南省" }, { "id": "24", "text": "陕西省" }, { "id": "25", "text": "甘肃省" }, { "id": "26", "text": "青海省" }, { "id": "27", "text": "台湾省" }, { "id": "28", "text": "内蒙古自治区" }, { "id": "29", "text": "广西壮族自治区" }, { "id": "30", "text": "西藏自治区" }, { "id": "31", "text": "宁夏回族自治区" }, { "id": "32", "text": "新疆维吾尔自治区" }],
    // smoking: [{ "id": "1", "text": "是" }, { "id": "2", "text": "否" }],
    // Seedoctor: [{ "id": "1", "text": "是" }, { "id": "2", "text": "否" }],
    Medical: [{ "id": "1", "text": "是" }, { "id": "2", "text": "否" }],
    insurance: [{ "id": "1", "text": "无" }, { "id": "2", "text": "意外险" }, { "id": "3", "text": "健康险" }, { "id": "4", "text": "车险" }, { "id": "5", "text": "财险" }],
    Causeclaim: [{ "id": "1", "text": "无" }, { "id": "2", "text": "交通事故" }, { "id": "3", "text": "意外伤害" }, { "id": "4", "text": "身体疾病" }, { "id": "5", "text": "财产损失" }],
    keyword: [{ "id": "1", "text": "无" }, { "id": "2", "text": "有某某病如何投保" }, { "id": "3", "text": "骗保" }, { "id": "4", "text": "治疗疾病" }],
    outfit: [{ "id": "1", "text": "大码" }, { "id": "2", "text": "中码" }, { "id": "3", "text": "小码" }],
    MonthlyC: [{ "id": "1", "text": "20%以内" }, { "id": "2", "text": "20%-40%" }, { "id": "3", "text": "40%-80%" }, { "id": "4", "text": "80%以上" }],
    Annual: [{ "id": "1", "text": "3万以内" }, { "id": "2", "text": "3万-15万" }, { "id": "3", "text": "15万-30万" }, { "id": "4", "text": "30万以上" }],
    Drunk: [{ "id": "1", "text": "无" }, { "id": "2", "text": "饮酒后驾驶" }, { "id": "3", "text": "醉酒驾驶" }],
    // searches: [{ "id": "1", "text": "无" }, { "id": "2", "text": "1-5次" }, { "id": "3", "text": "6-10次" }, { "id": "4", "text": "11-20次" }, { "id": "5", "text": "20次以上" }],
    // speeding: [{ "id": "1", "text": "无" }, { "id": "2", "text": "1-5次" }, { "id": "3", "text": "6-10次" }, { "id": "4", "text": "11-20次" }, { "id": "5", "text": "20次以上" }],
    parking: [{ "id": "1", "text": "无" }, { "id": "2", "text": "1-5次" }, { "id": "3", "text": "6-10次" }, { "id": "4", "text": "11-20次" }, { "id": "5", "text": "20次以上" }],
  };
  const mType = [{ "id": "1", "text": "文本框" }, { "id": "2", "text": "大于、小于、等于" }, { "id": "3", "text": "包含、不包含" }];
  const endData = ref<any>([]);
  const myJSonar = ref<any>();

  // methods
  function selectFn(e: string | number, b: string | number, d: string | number) {
    // typ 2 = TJData ; typ 1 = CZData ; typ 3 = BHData ;
    var val = e;
    var typ = 1;
    var name = '';
    if (val == 1) {
      typ = 3;
      name = "parking"
    } else if (val == 2) {
      typ = 3;
      name = "parking"
    } else if (val == 3) {
      typ = 3
      name = "sex";
    } else if (val == 4) {
      typ = 3
      name = "fame";
    } else if (val == 5) {
      typ = 3
      name = "marry";
    } else if (val == 6) {
      typ = 3
      name = "provice";
    } else if (val == 7) {
      typ = 3
      name = "study";
    } else if (val == 8) {
      typ = 3
      name = "dwxz"
    } else if (val == 9) {
      typ = 3
      name = "health"
    } else if (val == 10) {
      typ = 3
      name = "Medical"
    } else if (val == 11) {
      typ = 3
      name = "Medical"
    } else if (val == 12) {
      typ = 3
      name = "Medical"
    } else if (val == 13) {
      typ = 3
      name = "insurance"
    } else if (val == 14) {
      typ = 3
      name = "Causeclaim"
    } else if (val == 15) {
      typ = 3
      name = "keyword"
    } else if (val == 16) {
      typ = 3
      name = "parking"
    } else if (val == 17) {
      typ = 3
      name = "Drunk"
    } else if (val == 18) {
      typ = 3
      name = "outfit"
    } else if (val == 19) {
      typ = 3
      name = "MonthlyC"
    } else if (val == 20) {
      typ = 3
      name = "Annual"
    }


    else if (val == 21) {
      typ = 2
    } else if (val == 22) {
      typ = 2
    } else if (val == 23) {
      typ = 2
    } else if (val == 24) {
      typ = 2
    } else if (val == 25) {
      typ = 2
    } else if (val == 26) {
      typ = 2
    } else if (val == 27) {
      typ = 2
    } else if (val == 28) {
      typ = 2
    } else if (val == 29) {
      typ = 2
    } else if (val == 30) {
      typ = 2
    } else if (val == 31) {
      typ = 2
    } else if (val == 32) {
      typ = 2
    } else if (val == 33) {
      typ = 2
    } else if (val == 34) {
      typ = 2
    } else if (val == 35) {
      typ = 2
    } else if (val == 36) {
      typ = 2
    } else if (val == 37) {
      typ = 2
    } else {
      typ = null
    }
    endData.value[b].data[d].rather = '';
    endData.value[b].data[d].times = '';
    endData.value[b].data[d].rather2 = '';
    endData.value[b].data[d].times2 = '';
    endData.value[b].data[d].selectMore = '';
    endData.value[b].data[d].mType = typ;
    endData.value[b].data[d].mName = name;

  }

  function selectShow(e: any, b: string | number, d: string | number) {
    let isSelect = endData.value[b].data[d].isSelect;
    endData.value[b].data[d].isSelect = !isSelect
  }
  //活跃次数select下拉选择
  function selectFn2(e: { target: { [x: string]: { value: string; }; }; }, b: string | number, d: string | number) {
    endData.value[b].data[d].selectMore = '';
    let selectd = endData.value[b].data[d].times;
    selectd.forEach((item, i) => {
      let dun = "";
      if (i) {
        dun = " | "
      }
      endData.value[b].data[d].selectMore += dun + e.target[item].innerText;
      endData.value[b].data[d].mVal += dun + e.target[item].value
    })
    return false;
  }

  // type  点击按钮类型   { id: "1", text: "做过" }, { id: "2", text: "新增于" }, { id: "3", text: "活跃次数" }, { id: "4", text: "客户属性满足" }
  // id  并且对应的下标
  // ids 并且下面子类，或者对应的按钮
  function addItem(type: any, id: number, ids: any) {
    verifyNum();
    let obj = { type: type, term: '', rather: '', times: '', rather2: '', times2: '', selectMore: '', isSelect: '', mType: '', mName: '', mVal: '' };
    if (type == 2) {
      obj["term"] = 1;
    }
    if (type == 3) {
      //console.log(this.selectArrs.arr3);
      if (selectArrs.arr3.length >= 6) {
        return false;
      }
    }
    // 如果是非子类按钮点击时
    if (!ids && ids != 0) {
      id = id + 1;
    }

    if (endData.value[id]) {   //判断当前数组是否存在
      endData.value[id].data.push(obj)
    } else {
      endData.value.push({
        data: [obj]
      })
    }
  }

  /**
  * 移除
  * @param {number | string} id 当前点击数组对应的项的下标
  * @param {number | string} ids 当前点击数组对应的项子类那一项的下标
  */
  function removeItem(id: string | number, ids: any) {
    if (endData.value[id].data.length == 1) {  //如果是最后一条直接删除当前数组那一项
      endData.value.splice(id, 1);    //删除对应数据
    } else {
      //删除数组子类下的项
      endData.value[id].data.splice(ids, 1);    //删除对应数据
    }
  }

  //点击确定的事件
  function setChoose() {
    verifyNum();
    let arr = [];
    let isstate: number;
    const objData = JSON.parse(JSON.stringify(endData.value));
    objData.forEach((item: any, index: number) => {
      let index2 = index + 1;
      isstate = 1;
      item.data.forEach((a, i) => {
        let i2 = '';
        if (i) i2 = i;
        isstate = VerifyContent(a)
        a["times"] = a["times"].toString();
        a["id"] = index2 + '' + i2;
        a.selectMore = a.selectMore == '' ? "" : a.selectMore.join(' | ')
        arr.push(a);
      });
    });
    let strArr = JSON.stringify(arr);
    if (strArr == "[]" || !isstate) { ElMessage.warning("请设置筛选条件！"); return; }
    emitter.emit("EmitCustomerGroup", arr);
  }

  function onCreate() {
    verifyNum();
    let arr = [];
    let isstate: number;
    const objData = JSON.parse(JSON.stringify(endData.value));
    objData.forEach((item, index) => {
      let index2 = index + 1;
      isstate = 1;
      item.data.forEach((a, i) => {
        let i2 = '';
        if (i) { i2 = i }
        isstate = VerifyContent(a)
        a["times"] = a["times"].toString();
        a["id"] = index2 + '' + i2;
        a.selectMore = a.selectMore == '' ? '' : a.selectMore.join(' | ');
        arr.push(a);
      });
    });
    let strArr = JSON.stringify(arr);
    if (strArr == "[]" || !isstate) { ElMessage.warning("请设置筛选条件！"); return; }
    myJSonar.value = strArr;//筛选条件
    emitter.emit("EM_openVisible", myJSonar);
  }


  function VerifyContent(a) {
    let isstate = 1;
    if (a.mType == '' && a.mName == '') isstate = 0;
    if (a.mType == 2 && a.mName == 'jypl') {
      if (a.daily === "") isstate = 0;
      if (a.rather === "") isstate = 0;
      if (a.times === "") isstate = 0;
    }

    if (a.mType == 2 && a.mName != 'jypl') {
      if (a.rather === "") isstate = 0;
      if (a.times === "") isstate = 0;
    }
    if (a.mType == 3) {
      if (a.rather === "") isstate = 0;
      if (a.selectMore === "" || a.selectMore?.length === 0) isstate = 0;
    }
    return isstate
  }


  emitter.on("clearChooses", () => {
    clearChoose();
  })
  function clearChoose() {
    endData.value = [];
    isdisabled.value = true;
    emitter.emit("clearChoose")
    // mini.get("UserGroup").setValue(0);
  }

  function verifyNum() {
    endData.value.forEach((item, index) => {
      item.data.forEach((a, i) => {
        if (Number(a.times)) {
          a.times = Number(a.times);
        } else {
          a.times = 0;
        }
        if (Number(a.times2)) {
          a.times2 = Number(a.times2);
        } else {
          a.times2 = 0;
        }
      });
    });
  }

  /**
   * 输入框对输入数字的处理
   * @param {obj} event js事件对象
   * @param {string|number} b 一级数组子类下标
   * @param {string|number} d 一级子类下的子类（二级下标）
   * @param {string} name 需要更改的字段name名
   * @param {string|number} type 需要处理的类型，type=1 正数和小数，type=2 正整数，type为空或其他 数字（包含小数、负数）
   * @param {number} max 输入框允许输入的最大值，这里默认是180
   * @returns
   */
  function changeNum(event, b, d, name, type, max = 180) {
    //响应鼠标事件，允许左右方向键移动
    event = window.event || event;
    if (event.keyCode == 37 || event.keyCode == 39) {
      return;
    }
    let val = event.target.value;
    let t = val.charAt(0);
    let t2 = val.charAt(1);
    if (type == 2) {
      val = val.replace(/^[^\d]+/g, ''); //非正整数都替换为空
      if (Number(val) > max) {
        val = max;
      }
    } else {
      //先把非数字的都替换掉，除了数字和.
      val = val.replace(/[^\d.]/g, "");
      //必须保证第一个为数字而不是.
      val = val.replace(/^\./g, "");
      //保证只有出现一个.而没有多个.
      val = val.replace(/\.{2,}/g, ".");
      //保证.只出现一次，而不能出现两次以上
      val = val.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
      //console.log(t);
      //console.log(t2);
      if (t == 0 && t2 == 0) {
        val = 0;
      }
      if (val.toString().length > 10) {
        val = Number(val).toFixed(8)
      }
      //console.log(val);
      if (Number(val) > max) {
        val = max;
      }
      if (type == 1) {

      } else {
        //如果第一位是负号，则允许添加   如果不允许添加负号 可以把这块注释掉
        if (t == '-') {
          val = '-' + val;
        }
      }

    }
    var linReg = /^[0]+$/gi;    //全部都为0
    var ax = endData.value[b].data[d]
    if (linReg.test(val)) {
      ax[name] = 0
    } else {
      ax[name] = val
    }
  }

  // 返显客户群条件
  emitter.on("ViewSecurities", (row) => {
    let endArry = [];
    isdisabled.value = false;
    row.forEach((item, index) => {
      let strId = item.id + "";
      let ids = strId.slice(0, 1) - 1;
      let times = item.times;
      if (times.indexOf(",") != -1) {
        times = times.split(",");
      }
      const obj = {
        "type": item.type,
        "term": item.term,
        "rather": item.rather,
        "times": times,
        "rather2": item.rather2,
        "times2": item.times2,
        "selectMore": item.selectMore == '' ? '' : item.selectMore.split(' | '),
        "isSelect": false,
        "mType": item.mType,
        "mName": item.mName,
        "mVal": item.mVal,
      };
      if (endArry[ids]) {
        endArry[ids].data.push(obj)
      } else {
        endArry.push({
          data: [obj]
        })
      }

    });

    endData.value = endArry
  })

  function clearNoNum(obj) {
    if (!(/[^0]/gi.test(obj.value))) {
      return obj.value = 0;
    }
  }

  const selectArrs = computed(() => {
    let arr1 = [1], arr2 = [2], arr3 = [3], arr4 = [4];
    return { arr1, arr2, arr3, arr4 };
  });


  onBeforeUnmount(() => {
    emitter.off("clearChooses");
    emitter.off("EmitCustomerGroup");
    emitter.off("EM_openVisible");
  })

  return {
    MZData,
    TJData,
    BHData,
    CZData,
    selData,
    mType,
    endData,
    selectArrs,
    isdisabled,
    addItem,
    selectFn,
    selectFn2,
    selectShow,
    removeItem,
    setChoose,
    onCreate,
    clearChoose,
    clearNoNum,
    changeNum
  }
}
